home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Wonky Flux Batch 2019 02
/
Wonky_Flux_Batch_2019-02.zip
/
Wonky Flux Batch 2019-02
/
092 - EBU.dsk
/
GAMES
/
TIC.TAC.TOE.bas
< prev
Wrap
BASIC Source File
|
2019-02-17
|
7KB
|
317 lines
5 REM /BLANK0.j/Fixing/ttt<CTRL-J>Vers MCMLXIIVXIV<CTRL-J>Fixed Jul 13th, 1987<CTRL-J>JPE<CTRL-J>
7 REM Revised 15-Jul-87 : For Player Selection<CTRL-J>
10 SPEED= 255: TEXT : HOME : PRINT CHR$(4);"pr#3": PRINT CHR$(18)
30 DIM TC(3,3),OK(9,3),T(3,3),P(2),DI(4,2),PL(8,3),NW(2),P$(2),OC$(3),SC(2)
40 FOR R = 1 TO 3
50 FOR C = 1 TO 3
60 READ T(R,C)
70 NEXT C
80 NEXT R
90 DATA 2,3,2,3,1,3,2,3,2
100 FOR DN = 1 TO 4
110 FOR DV = 1 TO 2
120 READ DI(DN,DV)
130 NEXT DV
140 NEXT DN
150 DATA 0,1,1,1,1,0,1,-1
160 FOR PN = 1 TO 8
170 FOR PA = 1 TO 3
180 READ PL(PN,PA)
190 NEXT PA
200 NEXT PN
210 DATA 1,1,1,1,1,2,1,1,3,1,2,3,1,3,3,1,3,4,2,1,1,3,1,1
220 REM
230 OC$(1) = "-"
240 OC$(2) = "X"
250 OC$(3) = "O"
260 P$(1) = "Master"
270 P$(2) = "COMPUTER"
280 SC(1) = 0
290 SC(2) = 0
300 TG = 0
310 REM
320 REM
330 P(1) = 1
340 P(2) = 2
345 GOSUB 3000
350 GOTO 390
360 PS = P(1)
370 P(1) = P(2)
380 P(2) = PS
390 PRINT
400 PRINT "TIC-TAC-TOE"
410 MN = 0
420 FOR R = 1 TO 3
430 FOR C = 1 TO 3
440 TC(R,C) = 0
450 NEXT C
460 NEXT R
470 MN = MN +1
480 PN = 1
490 P = 0
500 GOSUB 2020
510 PRINT
520 PRINT P$(P(PN))" TO MARK AN "OC$(PN +1)
525 IF JE = 1 THEN ON P(PN) GOSUB 1000,1000
530 IF JE = 2 THEN ON P(PN) GOSUB 820,1000
535 IF JE = 3 THEN ON P(PN) GOSUB 820,820
540 SL = 3
550 ST = PN
560 GOSUB 2240
570 PRINT
580 IF N >0 THEN 640
590 IF MN = 6 THEN 730
600 IF MN = 5 THEN 690
610 IF PN = 2 THEN 470
620 PN = PN +1
630 GOTO 490
640 P = NW(N)
650 GOSUB 2020
660 PRINT P$(P(PN))" Wins!"
670 SC(P(PN)) = SC(P(PN)) +1
680 GOTO 730
690 P = 0
700 GOSUB 2020
710 PRINT " TIE GAME "
720 TG = TG +1
730 PRINT
735 PRINT : PRINT "Same Game? Y/N ";: GET YN$: IF YN$ = "Y" OR YN$ = "y" THEN PRINT : GOTO 360
740 PRINT : PRINT "ENTER 1 FOR NEW GAME, 2 TO QUIT ": GET EN$
750 IF EN$ < >"1" AND EN$ < >"2" THEN 740
753 LET EN = VAL(EN$)
755 IF EN = 1 THEN GOSUB 3000: GOTO 360
760 IF EN < >2 THEN 730
770 PRINT
780 PRINT P$(1)" WON "SC(1)
790 PRINT P$(2)" WON "SC(2)
800 PRINT " TIE GAMES "TG
810 PRINT CHR$(4);"RUNMC,S3,D2": NEW
820 PRINT "WHICH CELL? ENTER ROW,COLUMN."
830 INPUT "(0,0=NEW GAME) ";RM,CM
840 IF RM = 0 AND CM = 0 THEN 950
850 IF RM <1 OR RM >3 OR CM <1 OR CM >3 THEN 890
860 IF TC(RM,CM) = 0 THEN 980
870 PRINT "NOT AVAILABLE"
880 GOTO 900
890 PRINT "INVALID MOVE"
900 PRINT "THE BOARD LOOKS LIKE THIS:"
910 P = 0
920 GOSUB 2020
930 PRINT "NOW TRY AGAIN"
940 GOTO 820
950 PRINT "CANCELLED THAT GAME."
960 MN = 6
970 RETURN
980 TC(RM,CM) = PN
990 RETURN
1000 IF MN >1 THEN 1210
1010 IF PN < >1 THEN 1060
1020 GOSUB 2620
1030 RM = RT
1040 CM = CT
1050 GOTO 1990
1060 T = T(RM,CM)
1070 GOSUB 2620
1080 ON T GOTO 1090,1110,1140
1090 IF T(RT,CT) = 3 THEN 1070
1100 GOTO 1180
1110 RT = 2
1120 CT = 2
1130 GOTO 1180
1140 ON T(RT,CT) GOTO 1180,1150,1170
1150 IF ABS(RT -RM) = 2 OR ABS(CT -CM) = 2 THEN 1070
1160 GOTO 1180
1170 IF ABS(RT -RM) = 1 OR ABS(CT -CM) = 1 THEN 1070
1180 RM = RT
1190 CM = CT
1200 GOTO 1990
1210 IF MN >2 THEN 1240
1220 IF PN = 2 THEN 1340
1230 GOTO 1500
1240 ST = PN
1250 SL = 2
1260 GOSUB 2240
1270 IF N = 0 THEN 1340
1280 M% = RND(1) *N +1:M = M%
1290 P = NW(M)
1300 GOSUB 2480
1310 RM = RO
1320 CM = CO
1330 GOTO 1990
1340 ST = 3 -PN
1350 SL = 2
1360 GOSUB 2240
1370 IF N = 0 THEN 1430
1380 P = NW(N)
1390 GOSUB 2480
1400 RM = RO
1410 CM = CO
1420 GOTO 1990
1430 IF MN = 2 THEN 1500
1440 ST = PN
1450 GOSUB 2660
1460 IF N < >2 THEN 1500
1470 RM = RV
1480 CM = CV
1490 GOTO 1990
1500 F = 0
1510 FOR RM = 1 TO 3
1520 FOR CM = 1 TO 3
1530 IF TC(RM,CM) < >0 THEN 1760
1540 TC(RM,CM) = PN
1550 ST = PN
1560 SL = 2
1570 GOSUB 2240
1580 IF N = 0 THEN 1680
1590 IF MN = 2 AND PN = 1 THEN 1720
1600 P = NW(1)
1610 GOSUB 2480
1620 ST = 3 -PN
1630 TC(RO,CO) = ST
1640 SL = 2
1650 GOSUB 2240
1660 TC(RO,CO) = 0
1670 GOTO 1710
1680 IF MN = 2 AND PN = 1 THEN 1750
1690 ST = 3 -PN
1700 GOSUB 2660
1710 IF N = 2 THEN 1750
1720 F = F +1
1730 OK(F,1) = RM
1740 OK(F,2) = CM
1750 TC(RM,CM) = 0
1760 NEXT CM
1770 NEXT RM
1780 SL = 2
1790 ST = 3 -PN
1800 FOR CN = 1 TO F
1810 TC(OK(CN,1),OK(CN,2)) = PN
1820 GOSUB 2240
1830 TC(OK(CN,1),OK(CN,2)) = 0
1840 OK(CN,3) = M
1850 NEXT CN
1860 IF F < >1 THEN 1890
1870 CN = 1
1880 GOTO 1970
1890 SM = 1
1900 FOR IT = 2 TO F
1910 IF OK(SM,3) <OK(IT,3) THEN 1930
1920 SM = IT
1930 NEXT IT
1940 CN% = RND(1) *F +1:CN = CN%
1950 IF OK(CN,3) = OK(SM,3) THEN 1970
1960 GOTO 1940
1970 RM = OK(CN,1)
1980 CM = OK(CN,2)
1990 TC(RM,CM) = PN
1993 IF RM = 0 OR CM = 0 THEN 1000
1995 NOTRACE
2000 PRINT "COMPUTER TAKES ROW "RM" COLUMN "CM"
2010 RETURN
2020 QR = PL(P,1)
2030 QC = PL(P,2)
2040 DN = PL(P,3)
2050 QL = 0
2060 PRINT
2070 FOR QI = 1 TO 3
2080 PRINT TAB( 3);
2090 FOR QJ = 1 TO 3
2100 IF QL = 3 OR QI < >QR OR QJ < >QC THEN 2180
2110 FLASH : REM TURNS ON BLINKING
2120 PRINT OC$(TC(QI,QJ) +1);
2130 NORMAL : REM RESTORES NORMAL
2140 QR = QR +DI(DN,1)
2150 QC = QC +DI(DN,2)
2160 QL = QL +1
2170 GOTO 2190
2180 PRINT OC$(TC(QI,QJ) +1);
2190 PRINT " ";
2200 NEXT QJ
2210 PRINT
2220 NEXT QI
2230 RETURN
2240 N = 0
2250 M = 0
2260 FOR P = 1 TO 8
2270 RU = PL(P,1)
2280 CU = PL(P,2)
2290 DN = PL(P,3)
2300 NF = 0
2310 MF = 0
2320 FOR CE = 1 TO 3
2330 IF TC(RU,CU) = 0 THEN 2380
2340 IF TC(RU,CU) = ST THEN 2370
2350 MF = MF +1
2360 GOTO 2380
2370 NF = NF +1
2380 RU = RU +DI(DN,1)
2390 CU = CU +DI(DN,2)
2400 NEXT CE
2410 IF NF < >SL OR MF >0 THEN 2440
2420 N = N +1
2430 NW(N) = P
2440 IF MF >0 THEN 2460
2450 M = M +1
2460 NEXT P
2470 RETURN
2480 RO = 0
2490 CO = 0
2500 REM
2505 RT = PL(P,1)
2510 CT = PL(P,2)
2520 DN = PL(P,3)
2530 FOR CE = 1 TO 3
2540 IF TC(RT,CT) < >0 THEN 2580
2550 RO = RT
2560 CO = CT
2570 CE = 3
2580 RT = RT +DI(DN,1)
2590 CT = CT +DI(DN,2)
2600 NEXT CE
2610 RETURN
2620 RT% = RND(1) *3 +1:RT = RT%
2630 CT% = RND(1) *3 +1:CT = CT%
2640 IF TC(RT,CT) < >0 THEN 2620
2650 RETURN
2660 FOR RB = 1 TO 3
2670 FOR CB = 1 TO 3
2680 IF TC(RB,CB) < >0 THEN 2780
2690 SL = 2
2700 TC(RB,CB) = ST
2710 GOSUB 2240
2720 TC(RB,CB) = 0
2730 IF N <2 THEN 2780
2740 RV = RB
2750 CV = CB
2760 CB = 3
2770 RB = 3
2780 NEXT CB
2790 NEXT RB
2800 RETURN
3000 REM Subrs for Number of Players<CTRL-J><CTRL-J>
3005 D$ = CHR$(4)
3010 PRINT : PRINT "Number of Players? 0 = Computer VS Computer"
3020 PRINT " 1 = Human VS Computer"
3030 PRINT " 2 = Human VS Human ";: GET JE$
3040 JE = VAL(JE$): IF JE < >0 AND JE < >1 AND JE < >2 THEN 3010
3050 JE = JE +1
3070 ON JE GOSUB 3200,3400,3600
3090 RETURN
3200 REM Subr. For Computer VS Computer<CTRL-J>
3210 P$(1) = "Apple IIc"
3220 P$(2) = "COMPUTER"
3230 RETURN
3400 REM Subr. For Human VS Computer (you can't beat me!)<CTRL-J>
3405 PRINT
3410 INPUT "Players Name? ";P$(1)
3420 P$(2) = "Apple IIc"
3430 PRINT
3440 RETURN
3600 REM Subr. For Human VS Human<CTRL-J>
3608 PRINT
3610 INPUT "First Players Name? ";P$(1)
3620 PRINT
3630 INPUT "Second Players Name? ";P$(2)
3640 PRINT
3660 RETURN
3670 REM <CTRL-J>John P. Edwards 15-Jul-87<CTRL-J>